#include <vector>
#include <fstream>
#include <iostream>

using namespace std;

/*
对于以下整数数组:
1 2 3 3 4 0 10 6 5 -1 -3 2 3

编写一个函数，返回数组中波峰的个数。如果没有波峰，返回 0。
什么叫做波峰：一个位置上的数字，它左右的数字都小于它
*/
int peaks(vector<int> v) {
  int count = 0;
  
  for (int i = 1; i < v.size() - 1; ++i) {
    if (v[i] > v[i - 1] && v[i] > v[i + 1]) {
      ++count;
    }
  }

  return count;
}

// 返回最长的波峰和波谷的长度
int longestPeaks(vector<int> v) {
  int result = 0;

  for (int i = 1; i < v.size() - 1; ++i) {
    int l = i - 1;
    int r = i + 1;

    if (v[i] > v[l] && v[i] > v[r]) {
      // We find a peak here
      while (l - 1 >= 0 && (v[l - 1] < v[l])) {
        l -= 1;
      }
      
      while (r + 1 <= v.size() - 1 && (v[r + 1] < v[r])) {
        r += 1;
      }
      
      result = max(result, r - l + 1);
    }
  }

  return result;
}

int main(int argc, char const *argv[])
{
  /* code */
  vector<int> v {1, 2, 3, 3, 4, 0, 10, 6, 5, -1, -3, 2, 3};
  cout << longestPeaks(v) << endl;

  return 0;
}
